<!DOCTYPE html>
<meta charset="utf-8">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/simple-queue-common.js"></script>
<script>
// Verify that wraparound works correctly in SimpleQueue by creating a queue
// with more than 16K elements. This tests push(), shift() and peek().
promise_test(t => {
  let expectedNextValue = 0;
  const ws = new WritableStream({
    write: t.step_func(chunk => {
      assert_equals(expectedNextValue, chunk,
                    'chunk should have the expected value');
      ++expectedNextValue;
    })
  });
  const writer = ws.getWriter();
  let lastPromise;
  // Because this loop is synchronous, the elements all have to be queued before
  // they can be processed.
  for (let i = 0; i < NUMBER_OF_WRITES; ++i) {
    lastPromise = writer.write(i);
  }
  assert_equals(1 - NUMBER_OF_WRITES, writer.desiredSize,
                'underlying sink write() should not have been called yet');
  return lastPromise;
}, 'queueing more than 16K chunks should work');
</script>
